package springcloud.controller;


import com.alibaba.csp.sentinel.adapter.servlet.callback.UrlCleaner;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;

/**
 * 通过 UrlCleaner 接口来实现资源清洗，也就是对于/member/query/{id}这个 URL，
 * 统一归集到/member/query/*资源下
 */
@Component
public class CustomUrlCleaner implements UrlCleaner {
    @Override
    public String clean(String originUrl) {        //资源清洗
        /**
         * public static boolean isBlank(String str) {
         *         int strLen;
         *         if (str != null && (strLen = str.length()) != 0) {
         *             for(int i = 0; i < strLen; ++i) {//遍历
         *                 if (!Character.isWhitespace(str.charAt(i))) {
         *                     return false;
         *                 }
         *             }
         *             return true;
         *         } else {
         *             return true;
         *         }
         *     }
         */
        //isBlank方法就是判断 originUrl!=null && 有长度 && originUrl不是全部为 空格,全满足则返回false
        if(StringUtils.isBlank(originUrl)) {
            return originUrl;
        }
        if(originUrl.startsWith("/member/query")) {  //如果得到url是以 /member/query 开头,则进行处理
            //老师解读
            //1. 如果请求的接口 是 /member/query 开头的, 比如 /member/query/1 , /member/query/10...
            //2. 给sentinel 返回资源名为 /member/query/*
            //3. 在sentinel 对 /member/query/* 添加流控规则即可
            return "/member/query/*";
        }
        return originUrl;
    }
}
